package com.itheima2;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class StudentTest {
    public static void main(String[] args) {
        Student stu = new Student();
        /*
        * 动态代理
        * */


        StudentInterface proxy= (StudentInterface) Proxy.newProxyInstance(
                stu.getClass().getClassLoader(),
                new Class[]{StudentInterface.class},
                new InvocationHandler() {
            /*
            * 调用代理对象的任何方法，都会i回调到这个方法
            * proxy当前的代理对象
            * method当前的代理对象调用的那个方法的反射对象形式
            * args当前代理对象调用的那个方法的参数值
            * */
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        //增强study方法
                        if (method.getName().equals("study")){
                            method.invoke(stu,args);
                            return null;
                        }
                        //增强eat方法，不管用户在调用代理对象传递的int类型是多少，都把它改成1
                        if (method.getName().equals("eat")){
                            Object arg = args[0];
                            Object invoke =method.invoke(stu, arg, 1);
                            return invoke;
                        }
                        return method.invoke(stu,args);
                    }
                });
        proxy.study();
        proxy.eat("饭",12);
    }
}
